package com.jml.mapreduce.wordcount;

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/**
 * 4个
 * KEYIN, VALUEIN, KEYOUT, VALUEOUT
 * 输入kv: LongWritable表示这行数据在文件中位置,Text表示这一行的内容
 * 输出kv: Text表示单词, IntWritable表示单词出现的次数
 * 框架把文本映射成一行一行的数据，我们解析
 * 依次是：行号，文本 --- 文本，统计数量
 */
public class WordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

    Text k = new Text();
    IntWritable v = new IntWritable(1);

    /**
     * 框架将数据一行行输入进入,我们把他变成单词和出现的个数
     * @param key 行号
     * @param value 行内容
     * @param context 任务本身
     */
    @Override
    protected void map(LongWritable key, Text value, Context context)	throws IOException, InterruptedException {
        // 1 获取一行
        String line = value.toString();
        // 2 切割
        String[] words = line.split(" ");
        // 3 输出
        for (String word : words) {
            //把String用Text包装起来
            k.set(word);
            //把int用IntWritable包装起来
            context.write(k, v);
        }
    }
}
